# 获取当前目录
PWD:=$(shell pwd)
# Linux 内核的构建路径
KBUILD_DIR:=/lib/modules/$(shell uname -r)/build

# obj-m 表示将 mychrdev.c 这个文件 编译为 mychrdev.ko 模块。
obj-m += mychrdev.o

# 编译成模块
all: drv testapp

drv:
	make -C $(KBUILD_DIR) M=$(PWD) modules

testapp: test.c
	gcc -o $@ -g $<

test: drv testapp
	-sudo rmmod mychrdev >/dev/null 2>&1
	# 使用静态设备号 275 加载设备驱动
	#sudo insmod mychrdev.ko major_num=275 dev_param=7788 dev_args=10,20,30,40
	# 使用动态设备号加载设备驱动
	sudo insmod mychrdev.ko dev_param=7788 dev_args=10,20,30,40
	cat /proc/devices |grep chrdev
	sudo lsmod |grep mychrdev
	cat /proc/misc |grep mychrdev
	#sudo chmod 777 /dev/mychrdev
	ls -la /dev/mychrdev
	ls -la /sys/module/mychrdev
	sudo cat /sys/module/mychrdev/parameters/dev_param
	sudo cat /sys/module/mychrdev/parameters/dev_args
	sudo ./testapp /dev/mychrdev
	#sudo rmmod mychrdev
	#dmesg
	#cat /dev/kmsg

clean:
	-rm -f ./testapp >/dev/null 2>&1
	make -C $(KBUILD_DIR) M=$(PWD) clean
